From: Keir Fraser Date: Wed, 20 Jan 2010 20:36:19 +0000 (+0000) Subject: libxl, hvm: Add support to trigger power or sleep button events X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~12713 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=55274e039ff0538354ec00e96eae45e101faeb31;p=xen.git libxl, hvm: Add support to trigger power or sleep button events Signed-off-by: Paul Durrant --- diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 7b7289f863..1689705547 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2198,3 +2198,21 @@ int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t targ rc = xc_domain_memory_set_pod_target(ctx->xch, domid, (target_memkb - videoram) / 4, NULL, NULL, NULL); return rc; } + +int libxl_button_press(struct libxl_ctx *ctx, uint32_t domid, libxl_button button) +{ + int rc = -1; + + switch (button) { + case POWER_BUTTON: + rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_POWER, 0); + break; + case SLEEP_BUTTON: + rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_SLEEP, 0); + break; + default: + break; + } + + return rc; +} diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 9b69772658..84e412a0c6 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -353,4 +353,12 @@ int libxl_device_pci_init(libxl_device_pci *pcidev, unsigned int domain, unsigned int bus, unsigned int dev, unsigned int func, unsigned int vdevfn); -#endif +typedef enum { + POWER_BUTTON, + SLEEP_BUTTON +} libxl_button; + +int libxl_button_press(struct libxl_ctx *ctx, uint32_t domid, libxl_button button); + +#endif /* LIBXL_H */ + diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index 34eefef5b2..694a950360 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -931,6 +931,7 @@ static void help(char *command) printf(" cd-insert insert a cdrom into a guest's cd drive\n\n"); printf(" cd-eject eject a cdrom from a guest's cd drive\n\n"); printf(" mem-set set the current memory usage for a domain\n\n"); + printf(" button-press indicate an ACPI button press to the domain\n\n"); } else if(!strcmp(command, "create")) { printf("Usage: xl create [options] [vars]\n\n"); printf("Create a domain based on .\n\n"); @@ -984,6 +985,10 @@ static void help(char *command) } else if (!strcmp(command, "mem-set")) { printf("Usage: xl mem-set \n\n"); printf("Set the current memory usage for a domain.\n\n"); + } else if (!strcmp(command, "button-press")) { + printf("Usage: xl button-press